Model Binding
view傳值給controller的第二種方式,也是比較常用的方式
通常view傳資料時,還是傳表單居多
我們先講簡單的Model Binding方式
以下範例
//Action
public ActionResult BasicMB(string name)
{
ViewBag.Name=name;
return View();
}
//View
<div>
@using(Html.BwginForm()){
名字:<input type="text" name="name"/>
<input type="submit" value="送出" />
}
</div>
<p>Name:@ViewBag.Name</p>
就這麼簡單寫完了~~
要注意的是,回傳到controller的時候它對照的值是name!!不是id
然後重點是要使用Html.BeginForm()幫忙產生含路由資訊的Form
當然也可以改變傳遞給哪個action
只要改寫成Html.BeginForm(string actionName,string controllerName)
這樣就可以了
這種Model Binding的方式也可以塞入多筆,例如以下
//Action
public ActionResult BasicMB(string name,string classname)
{
ViewBag.Name=name;
ViewBag.ClassName=classname;
return View();
}
//View
<div>
@using(Html.BwginForm()){
名字:<input type="text" name="name"/>
班級:<input type="text" name="classname"/>
<input type="submit" value="送出" />
}
</div>
<p>Name:@ViewBag.Name</p>
<p>Class:@ViewBag.ClassName</p>
但是用看的也知道,傳的值少的時候沒有問題,一多起來程式碼就會看起來很醜
你的Action後面參數可能會寫了一大串還寫不完
於是MVC提供了一個FormCollection類別來因應這個需求
有兩個地方寫錯
<div></div>
應該要放在{}裡面
(Html.BwginForm())
應該是
(Html.BeginForm())
正確寫法
@using(Html.BeginForm()){
<div>
名字:<input type="text" name="name"/>
班級:<input type="text" name="classname"/>
<input type="submit" value="送出" />
</div>
}
雖然已經過很久了哈哈
不過最近在看你的文章
受益良多 感謝~